package de.fhd.pms.ctrl;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import de.fhd.pms.dao.AutoDao;
import de.fhd.pms.dao.FahrtDao;
import de.fhd.pms.dao.KundeDao;
import de.fhd.pms.dao.StationDao;
import de.fhd.pms.model.Auto;
import de.fhd.pms.model.Fahrt;
import de.fhd.pms.model.Station;

import de.fhd.pms.model.Kunde;
 


/**
 * The Controller class for {@link Fahrt} objects. 
 * Its tasks:
 * <ul>
 * <li>read and verify the parameters</li>
 * <li>access to the objects of the system</li>
 * <li>selection of the view and provision of content for the view</li>
 * </ul>
 * 
 * @author Fischer, Neetzel & Six
 *
 */

@Controller
public class FahrtController {
	private FahrtDao fahrtDao = null;
	private KundeDao kundeDao = null;
	private AutoDao autoDao = null;
	private StationDao stationDao = null;

	public void setFahrtDao(FahrtDao fahrtDao) {
		this.fahrtDao = fahrtDao;
	}

	public void setKundeDao(KundeDao kundeDao) {
		this.kundeDao = kundeDao;
	}

	public void setAutoDao(AutoDao autoDao) {
		this.autoDao = autoDao;
	}
	public void setStationDao(StationDao stationDao) {
		this.stationDao = stationDao;
	}

	/**
	 * <p>
	 * Searches for all {@link Fahrt} objects and returns them in a
	 * <code>Collection</code>.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/AlleFahrten.html'.
	 * </p>
	 */
	//Ohne DTO
//	@RequestMapping(value = "/AlleFahrten.html", method = RequestMethod.GET)
//	public ModelAndView findAll() {
//		ModelAndView mv = new ModelAndView();
//		mv.addObject("title", "Fahrten");
//		mv.addObject("message", "Alle Fahrten aller Autos im Verein.");
//		mv.addObject("fahrten", fahrtDao.findAll());
//		mv.setViewName("list-fahrten");
//		return mv;
//	}
	
//	ORIGINAL
//    @RequestMapping(value="/AlleFahrten.html", method=RequestMethod.GET)
//    public ModelAndView findAll() {
//		ModelAndView mv = new ModelAndView();
//		mv.addObject("title", "Fahrten");
//		mv.addObject("message", "Alle Fahrten aller Autos im Verein.");
//		mv.addObject("fahrten", fahrtDao.findAllDTO());
//		mv.setViewName("list-fahrten");
//		return mv;
//    }
	
	
//	unseres mit dto
  @RequestMapping(value="/AlleFahrten.html", method=RequestMethod.GET)
  public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Alle abgeschlossene Fahrten");
		mv.addObject("message", "");
		mv.addObject("fahrten", fahrtDao.findAllDTO());
		mv.setViewName("admin-list-fahrt-alle");
		return mv;
  }	

	
	@RequestMapping(value = "/BeginneFahrt.html", method = RequestMethod.GET)
	public ModelAndView beginneFahrt(@RequestParam(required = true) Integer id) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Eine Fahrt beginnen");
		mv.addObject("message", "Wenn Sie sich angemeldet haben und bereits ein Wunschauto auf einer Station gefunden haben, dann können Sie hier Ihre Fahrt eintragen.");
		mv.addObject("auto", autoDao.findById(id));
		mv.addObject("kunde", kundeDao.findAll());
		
		mv.setViewName("kunde-set-fahrt");
		return mv;
	}


    /**
     * <p>Saves a Fahrt.</p>
     * 
     * <p>Expected HTTP POST and request '/SaveFahrt.html'.</p>
     * @return 
     */
    //neu
    @RequestMapping(value="/SaveFahrt.html", method=RequestMethod.POST)
    public String save(int auto, int kunde) {
    	fahrtDao.beginne(auto, kunde);
        return "redirect:SuccessFahrt.html";
    }
    
	@RequestMapping(value = "/SuccessFahrt.html", method = RequestMethod.GET)
	public ModelAndView success() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Erfolgreich!");
		mv.addObject("message", "Ihre Fahrt wurde erfolgreich angelegt. Sie können ab jetzt das Fahrzeug nutzen.");
		mv.setViewName("kunde-set-fahrt-success");
		return mv;
	}
    

//	ORIGINAL
//    @RequestMapping(value="/SaveFahrt.html", method=RequestMethod.POST)
//    public String save(@RequestParam(required=true) Integer id, Integer[] sitz) {
//    	fahrtDao.beginne(id, sitz);
//        return "redirect:index.html";
//    }
    




	/**
	 * <p>
	 * Searches for {@link Fahrt} objects that are not yet terminated and
	 * returns them in a <code>Collection</code>.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/AktuelleFahrten.html'.
	 * </p>
	 */
	@RequestMapping(value = "/AktuelleFahrten.html", method = RequestMethod.GET)
	public ModelAndView findAktuelle() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Alle aktuellen Fahrten");
		mv.addObject("message", "Alle Fahrten, die noch nicht beendet sind. Klicken Sie auf ein Auto um die Fahrt zu beenden.");
		mv.addObject("fahrten", fahrtDao.findNichtBeendetDTO());
		mv.setViewName("admin-list-fahrt-offen");
		return mv;
	}
	
//	ORIGINAL
//    @RequestMapping(value="/AktuelleFahrten.html", method=RequestMethod.GET)
//    public ModelAndView findAktuelle() {
//		ModelAndView mv = new ModelAndView();
//		mv.addObject("title", "Aktuelle Fahrten");
//		mv.addObject("message", "Alle Fahrten die noch nicht beendet sind. Klicken Sie auf ein Boot um die Fahrt zu beenden.");
//		mv.addObject("fahrten", fahrtDao.findNichtBeendetDTO());
//		mv.setViewName("list-fahrten");
//		return mv;
//    }

	/**
	 * <p>
	 * Terminates a Fahrt.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP POST and request '/StopFahrt.html?id=5'.
	 * </p>
	 * 
	 * @return
	 */
	@RequestMapping(value = "/StopFahrt.html", method = RequestMethod.GET)
	public String save(@RequestParam(required = true) Integer sId,int fId,	 float km) {
		fahrtDao.beende(fId,sId, km);
		
		
		// Station auswählen
		return "redirect:AktuelleFahrten.html";
	}
	
	@RequestMapping(value = "/EndFahrt.html", method = RequestMethod.GET)
	public ModelAndView EndFahrt(@RequestParam(required = true) Integer id) {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Aktuelle Fahrt beenden");
		mv.addObject("message", "Klicken Sie auf ein Auto um die Fahrt zu beenden.");
		mv.addObject("fahrten", fahrtDao.findById(id));
		mv.addObject("station", stationDao.findAll());
		mv.setViewName("admin-end-fahrt");
		
		return mv;
	}
	
	

//	ORIGINAL
//    @RequestMapping(value="/StopFahrt.html", method=RequestMethod.POST)
//    public String save(@RequestParam(required=true) Integer id) {
//    	fahrtDao.beende(id);
//        return "redirect:AktuelleFahrten.html";
//    }

}
